package cl.zeke.cursos.jsf2spring3jpa2.negocio.services;

import cl.zeke.cursos.jsf2spring3jpa2.dao.PerfilDao;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.entities.Perfil;
import cl.zeke.cursos.jsf2spring3jpa2.negocio.exceptions.LogicaNegocioException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author eduardo
 */
@Service
@Scope(proxyMode = ScopedProxyMode.INTERFACES)
public class PerfilServiceImpl implements PerfilService {

    @PersistenceContext
    private EntityManager em;
    
    @Autowired
    private PerfilDao perfilDao;
    
    @Transactional(readOnly = true)
    public List<Perfil> traerPerfiles() {
        return null;
    }

    @Transactional(readOnly = false)
    public Perfil guardarPerfil(Perfil perfil) {
        
        if(perfil.getIdPerfil() == null) {
            Perfil perfilAux = perfilDao.traerPorNombre(perfil.getNombre());
            if(perfilAux != null) {
                throw new LogicaNegocioException("ya existe el perfil: '" + perfil.getNombre() +"'");
            }
            
            int idPerfil = (int)(Math.random()*15000000);
            perfil.setIdPerfil(idPerfil);
        }
        
        perfil = em.merge(perfil);
        return perfil;
    }
    
}
